// 导入数据库操作模块
const { id } = require("@hapi/joi/lib/base");
const query = require("../db/index");

// 获取文章分类列表数据的处理函数
exports.getArticleCates = (req, res) => {
  // 根据分类的状态，获取所有未被删除的分类列表数据
  //is_delete 为0 闭包是没有被标记未删除的数据
  const sql =
    "select * from ev_article_cate where is_delete = 0 order by id asc;";
  query(sql)
    .then((result) => {
      res.send({
        status: 0,
        message: "获取文章分类列表成功",
        data: result,
      });
    })
    .catch((err) => res.cc(err));
};

exports.addArticleCates = (req, res) => {
  // 定义查询 分类名称 与 分类别名 是否被占用的 SQL 语句
  const sql = "select * from ev_article_cate where name = ? or alias = ?";
  query(sql, [req.body.name, req.body.alias])
    .then((result) => {
      // 分类名称 和 分类别名 都被占用
      if (result.length === 2)
        return res.cc("分类名称与别名被占用，请更换后重试！");
      if (
        result.length === 1 &&
        result[0].name === req.body.name &&
        result[0].alias === req.body.alias
      )
        return res.cc("分类名称与别名被占用，请更换后重试！");
      // 分类名称 或 分类别名 被占用
      if (result.length === 1 && result[0].name === req.body.name)
        return res.cc("分类名称被占用，请更换后重试！");
      if (result.length === 1 && result[0].alias === req.body.alias)
        return res.cc("分类别名被占用，请更换后重试！");

      //可以插入
      const sql = "insert into ev_article_cate set ?";
      query(sql, req.body)
        .then((result) => {
          // SQL 语句执行成功，但是影响行数不等于 1
          if (result.affectedRows !== 1) return res.cc("新增文章分类失败！");
          // 新增文章分类成功
          res.cc("新增文章分类成功！", 0);
        })
        .catch((err) => res.cc(err));
    })
    .catch((err) => res.cc(err));
};

// 删除文章分类的处理函数
exports.deleteCateById = (req, res) => {
  const sql = "update ev_article_cate set is_delete = 1 where id = ?";
  query(sql, req.params.id)
    .then((result) => {
      // SQL 语句执行成功，但是影响行数不等于 1
      if (result.affectedRows !== 1) return res.cc("删除文章分类失败！");
      // 新增文章分类成功
      res.cc("删除文章分类成功！", 0);
    })
    .catch((err) => res.cc(err));
};

// 根据 Id 获取文章分类的处理函数
exports.getArtCateById = (req, res) => {
  const sql = "select * from ev_article_cate where id=?";
  query(sql, req.params.id)
    .then((result) => {
      //   SQL 语句执行成功，但是没有查询到任何数据
      if (result.length !== 1) return res.cc("获取文章分类数据失败！");
      // 获取文章分类数据成功
      res.send({
        status: 0,
        message: "获取文章分类数据成功！",
        data: result[0],
      });
    })
    .catch((err) => res.cc(err));
};

exports.updateCateById = (req, res) => {
  // 定义查询 分类名称 与 分类别名 是否被占用的 SQL 语句
  const sql = `select * from ev_article_cate where id<> ? and (name = ? or alias = ?)`;
  query(sql, [req.body.id, req.body.name, req.body.alias])
    .then((result) => {
      // 分类名称 和 分类别名 都被占用
      if (result.length === 2)
        return res.cc("分类名称与别名被占用，请更换后重试！");
      if (
        result.length === 1 &&
        result[0].name === req.body.name &&
        result[0].alias === req.body.alias
      )
        return res.cc("分类名称与别名被占用，请更换后重试！");
      // 分类名称 或 分类别名 被占用
      if (result.length === 1 && result[0].name === req.body.name)
        return res.cc("分类名称被占用，请更换后重试！");
      if (result.length === 1 && result[0].alias === req.body.alias)
        return res.cc("分类别名被占用，请更换后重试！");

      // TODO：更新文章分类
      //   定义更新文章分类的 SQL 语句
      const sql = `update ev_article_cate set ? where id = ?`;
      query(sql, [req.body, req.body.id])
        .then((result) => {
          // SQL 语句执行成功，但是影响行数不等于 1
          if (result.affectedRows !== 1) return res.cc("更新文章分类失败！");
          // 更新文章分类成功
          res.cc("更新文章分类成功！", 0);
        })
        .catch((err) => res.cc(err));
    })
    .catch((err) => res.cc(err));
};
